package org.example.lanchain.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.example.lanchain.assistant.SeparateMemoryChatAssistant;
import org.example.lanchain.bean.ChatForm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import jakarta.servlet.http.HttpServletResponse;
import org.example.lanchain.service.AiAssistantService;
import org.example.lanchain.bean.AiAssistant;

/**
 * 店小二Agent对话控制器
 * 
 * @Tag 注解用于 Swagger 文档，指定 API 分组名称为"店小二Agent"
 * @RestController 注解表明这是一个 RESTful Web 服务的控制器
 * @RequestMapping 注解指定该控制器的基础 URL 路径为 "/dianxiaoer"
 */
@Tag(name = "店小二Agent")
@RestController
@RequestMapping("/dianxiaoer")
public class DianxiaoerController {
    
    /**
     * 注入店小二Agent对话助手服务
     * 
     * @Autowired 注解实现依赖注入，Spring 会自动创建并注入 SeparateMemoryChatAssistant 的实例
     */
    @Autowired
    private SeparateMemoryChatAssistant dianxiaoerAgent;

    @Autowired
    private AiAssistantService aiAssistantService;

    /**
     * 处理对话请求的接口
     * 
     * @Operation 注解用于 Swagger 文档，描述接口功能为"对话"
     * @PostMapping 注解指定这是一个 POST 请求，路径为 "/chat"，并设置响应内容类型为流式文本
     * 
     * @param chatForm 包含对话信息的表单对象，包括 memoryId（会话ID）和 message（用户消息）
     * @param response 用于设置响应头
     * @return Flux<String> 返回一个响应式流，用于流式返回对话响应
     * 
     * 该接口通过 dianxiaoerAgent 处理用户的客服咨询对话，支持流式响应
     */
    @Operation(summary = "对话")
    @PostMapping(value = "/chat", produces = "text/stream;charset=utf-8")
    public Flux<String> chat(@RequestBody ChatForm chatForm, HttpServletResponse response) {
        Long memoryId = chatForm.getMemoryId();
        if (memoryId == null) {
            memoryId = System.currentTimeMillis();
            response.setHeader("x-memory-id", memoryId.toString());
        }
        // 新增：根据 assistantId 查找 systemPrompt
        String systemPrompt = null;
        if (chatForm.getAssistantId() != null) {
            AiAssistant assistant = aiAssistantService.getAiAssistantById(chatForm.getAssistantId());
            if (assistant != null && assistant.getSystemPrompt() != null && !assistant.getSystemPrompt().isEmpty()) {
                systemPrompt = assistant.getSystemPrompt();
            }
        }
        if (systemPrompt == null || systemPrompt.isEmpty()) {
            systemPrompt = "你是\"店小二Agent\"，智能客服助手。我可以为你提供专业的客服服务，帮助解答各种问题。有什么需要帮忙的吗？";
        }
        return dianxiaoerAgent.chatMedicalWithPrompt(memoryId, chatForm.getMessage(), systemPrompt);
    }
}